perm filename ARMSW[SYS,HE]10 blob
sn#058821 filedate 1973-08-21 generic text, type T, neo UTF8
00100 COMMENT ⊗ VALID 00017 PAGES
00200 RECORD PAGE DESCRIPTION
00300 00001 00001
00400 00003 00002 IFN USER+TRACK,<0>
00500 00005 00003 NXTJIF:
00600 00007 00004 WATSTL: CONI CLOCK,AC
00700 00009 00005 MAIN: TRNE RUN
00800 00012 00006 TT: PUSHJ P,REFLEX
00900 00013 00007 ANGLES: MOVEI I,5
01000 00016 00008 IFE USER,<
01100 00017 00009 SERVO: TRNN RUN
01200 00019 00010 DRIVE:
01300 00022 00011 IFN SIMU,< IF IN SIMU PREDICT NEXT VALUE OF THETA
01400 00024 00012 NXTH: MOVE AC,[XWD T0,T0P]
01500 00027 00013 EVAL: MOVEI I,5
01600 00032 00014 DHO: AOJ I, DISASTER HAS OCCURED
01700 00035 00015 NEXT: TRNE RUN
01800 00039 00016 PREAD:
01900 00041 00017 NON: POINT 12,INNER(AC),11
02000 00045 ENDMK
02100 ⊗;
00100 IFN USER+TRACK,<0>
00200 STRADR: MOVE BITSAV ;Enters here every 1/60 th. seccond
00300 IFE USER+TRACK,<
00400 TRNE DTST
00500 CALLI 400024
00600 DATAO ARM,[2]
00700 SOSLE STWT
00800 CALLI 400024
00900 >
01000 MOVE P,[XWD -PDLL,PDL] ;PUSH DOWN STACK
01100 MOVE CBUF,CBUFS
01200 MOVE DATWD,DATWDS
01300 IORI DATWD,2 ;YELLOW ARM
01400 IFN REPORT+TRACK,<
01500 MOVE DATA,DATPT
01600 >
01700 IFN USER+TRACK,<
01800 TRNE DTST
01900 JRST SWDONE
02000 >
02100 IFE USER,<
02200 IFN TRACK,<
02300 SKIPE WALK
02400 JRST NCHK
02500 >
02600 CONSZ 40 ;CHECK TO SEE IF ON PDP-6
02700 JRST[ MOVEI TAC,PDPERR
02800 MOVEM TAC,TRAJER
02900 JRST TOFF]
03000 CONI 0,AC
03100 ANDI AC,7
03200 CONO 0,2050(AC)
03300 TRZE TRIP ;TURN ON ARM
03400 DATAO ARM,[3]
03500 >
03600 NCHK:
03700 MOVEI K,51B23 ;-10 VOLT REFERENCE
03800 IFE USER,<PUSHJ P,PREAD ;REFTR← -10 volt reference
03900 LDB AC,SNUM ;PICK UP MIDDLE SAMPLE
04000 ANDI DACVAL,7777 ;LEAVE LAST SAMPLE IN J
04100 ADDI AC,(DACVAL) ;ADD THEM TOGETHER
04200 >
04300 IFN USER,<MOVEI AC,17770>
04400 CAIGE AC,17000 ;IS THE FUSE BLOWN
04500 JRST[ MOVEI TAC,REFERR
04600 MOVEM TAC,TRAJER
04700 JRST TOFF]
04800 MOVEM AC,REFTR ;REFERENCE READING
04900 IFN TRACK,<
05000 SKIPE WALK
05100 JRST TOK
05200 >
05300 MOVEI AC,=16666
05400 MOVEM AC,ETIME
05500 MOVSI AC,(1.0)
05600 MOVEM AC,TDF
05700 IFE USER,<
05800 CONI CLOCK,AC
05900 TLZ AC,777774
06000 JRST STIME ;TIME IN MICRO SECONDS
06100 >
06200 IFN USER,<JRST .+2>
00100 NXTJIF:
00200 IFN USER,<JRST SWDONE>
00300 IFN DEB<
00400 MOVEM 17,ACSAV+17
00500 MOVEI 17,ACSAV
00600 BLT 17,ACSAV+16
00700 MOVE 17,ACSAV+17
00800 >
00900 IFN TRACK,<
01000 SKIPE WALK
01100 JRST TOK
01200 >
01300 IFN REPORT+TRACK,<
01400 HRRZI TAC,(DATA)
01500 CAIL TAC,DATO+DBL-1
01600 JRST[ SUB DATA,[XWD DBL,DBL]
01700 MOVE TAC,[XWD DATO+DBL,DATO]
01800 BLT TAC,(DATA)
01900 HRRZI AC,(DATA)
02000 HRRZ TAC,DATIWD
02100 SUBI AC,(TAC)
02200 JRST RDP]
02300 HRRZI AC,(DATA)
02400 HRRZ TAC,DATIWD
02500 SUBI AC,(TAC)
02600 HRRZ MQ,DATPT
02700 SUBI TAC,(MQ)
02800 IMUL AC,TAC
02900 RDP: SKIPLE AC
03000 IFN TRACK,<PUSH DATA,[0]>
03100 IFN REPORT,<PUSH DATA,[SIXBIT/ERROR/]>
03200 MOVEI AC,DATO-1
03300 HRRZ TAC,DATIWD
03400 CAIL TAC,DATO+DBL-1
03500 HRRM AC,DATIWD
03600 MOVEM DATA,DATPT
03700 >
03800 IFE USER,<
03900 MOVEI TAC,=2000
00100 WATSTL: CONI CLOCK,AC
00200 TLZ AC,777774
00300 SUB AC,LTIME
00400 JUMPGE AC,.+2
00500 ADD AC,[=1000000]
00600 IFN REPORT,<
00700 CAIN TAC,=2000
00800 JRST[ PUSH DATA,[<SIXBIT/TICK/>+1]
00900 PUSH DATA,AC
01000 JRST .+1]
01100 >
01200 MOVEM AC,ETIME
01300 TRNE RUN
01400 JRST[ MOVE MQ,AC
01500 FSC MQ,233
01600 FMPR MQ,[0.00006]
01700 MOVEM MQ,TDF
01800 MOVE AC,LTIME
01900 ADD AC,ETIME
02000 JRST SSTIME]
02100 CAIGE AC,=16667 ;delta T greater than 16.7 msec.?
02200 SOJGE TAC,WATSTL
02300 JUMPL TAC,TE
02400 MOVSI AC,(1.0)
02500 MOVEM AC,TDF
02600 MOVE AC,LTIME
02700 ADDI AC,=16667
02800 SSTIME: TLNE AC,777774
02900 SUB AC,[=1000000]
03000 STIME: MOVEM AC,LTIME ;LTIME←LTIME+16.7 msec.
03100 >
03200 SOSGE COUNT
03300 JRST[TE:MOVEI AC,TERR
03400 MOVEM AC,TRAJER
03500 JRST ZITO]
00100 MAIN: TRNE RUN
00200 JRST[ PUSHJ P,EVAL
00300 PUSHJ P,NXTH
00400 JRST .+1]
00500 MOVEI J,6
00600 PUSHJ P,ANGLES ;read joint angles
00700 TRNE RONLY ;read angles only?
00800 JRST[ PUSHJ P,HEAD ;read hand also
00900 MOVE AC,HAND
01000 MOVEM AC,SET
01100 PUSHJ P,REFLEX
01200 PUSHJ P,READED] ;DOES NOT RETURN
01300 TRNN RUN
01400 JRST[ SKIPG TAC,FUNCT ;not run, mabye a function
01500 PUSHJ P,SETSET
01600 JUMPL TAC,NEXT
01700 JUMPE TAC,[CAIL CBUF,BUF;try next buffer
01800 SETOM (CBUF) ;dont do this if first buffer
01900 MOVEM CBUF,CBUFS
02000 ADDI CBUF,1001
02100 CAILE CBUF,BUF2
02200 MOVEI CBUF,BUF ;Advance buffer
02300 MOVE 2,(CBUF)
02400 JUMPL 2,[BUFWT:MOVE CBUF,CBUFS;wait for buffer
02500 JRST SWDONE]
02600 JUMPN 2,BUFRDY ;the last buffer stop.
02700 JRST[ TRO DTST
02800 MOVEI 2,WAITIN
02900 HRRM 2,JUMPBK
03000 MOVEM 2,STKPTR
03100 IFN REPORT,<PUSH DATA,[0]>
03200 JRST BUFWT]
03300 BUFRDY: HRRZ 2,(CBUF)
03400 ADDI 2,-1(CBUF)
03500 HRRZM 2,STKPTR
03600 JRST NEXT]
03700 CAIN TAC,6
03800 JRST SETCH
03900 JRST TT] ;otherwise perform function
04000 JUMPE J,[RUDONE:
04100 TRNN NSET
04200 PUSHJ P,SETSET
04300 TRZ DROP+RUN+FINAL+WOB ;if J is zero then end of run
04400 TDZ DATWD,[770001252500]
04500 TRZE STP
04600 JRST[ MOVEI TAC,STPERR
04700 MOVEM TAC,TRAJER
04800 POP P,TAC
04900 JRST TOFF]
05000 SKIPN AC,FUNCT
05100 JRST NEXT
05200 CAIN AC,22
05300 JRST[ TRZ HCL
05400 SETZM TDAT
05500 SETZM FUNCT
05600 DATAO DEVT,TDAT
05700 JRST NEXT]
05800 MOVEI AC,=16667
05900 MOVEM AC,ETIME
06000 JRST .+1]
00100 TT: PUSHJ P,REFLEX
00200 DISP: MOVE AC,FUNCT
00300 JUMPL AC,.+2
00400 CAILE AC,MAXFN
00500 JRST[ MOVEI TAC,FUNERR
00600 MOVEM TAC,TRAJER
00700 JRST TOFF]
00800 JRST @.+1(AC) ;Perform function
00900 NXTJIF ;0
01000 HOPEN ;1
01100 HCLOSE ;2
01200 NXTJIF ;3
01300 PLACE ;4
01400 NUDGE ;5
01500 SETCH ;6
01600 STOP ;7
01700 SAVE ;10
01800 RESTORE ;11
01900 CENTER ;12
02000 SET.ARM ;13 SET_ARM
02100 WOBBLE ;14
02200 SEARCH ;15
02300 AOJI ;16
02400 SLAVE ;17
02500 HOME ;20
02600 PATH ;21
02700 TOOL ;22
02800
02900 XLIST
03000 SUBTTL SPACEWAR CODE ANGLE MEASUREMENT LOU PAUL
03100 LIST
00100 ANGLES: MOVEI I,5
00200 JFCL 10,.+1
00300 MOVEI L,10
00400 IFN REPORT,<PUSH DATA,[<SIXBIT/THETA/>+6]>
00500 SETCHA: MOVEI K,CHA
00600 TRNE ALT6
00700 MOVEI K,N6CHA
00800 SKIPA
00900 RSTRT: MOVE K,CHAN(I)
01000 SOJL L,REDER
01100 IFE USER,<
01200 PUSHJ P,PREAD
01300 LDB AC,SNUM
01400 CAIN I,5
01500 JRST[ TRNE POTREAD
01600 JRST .+1
01700 CAIL AC,1000
01800 CAILE AC,7000
01900 JRST[ TRC ALT6
02000 JRST SETCHA]
02100 MOVEI K,CHA5
02200 JRST .+1]
02300 ANDI DACVAL,7777
02400 ADDI AC,(DACVAL)
02500 SETZ TAC,
02600 DIV AC,REFTR
02700 ASH AC,-26
02800 MOVE TAC1,AC
02900 TRNE POTREAD
03000 JRST[ ADDI TAC1,=1000
03100 JRST EXON]
03200 ASHC AC,-11 ;LEAVE INDEX INTO NON-LINEAR DIFF TABLE IN AC
03300 LDB MQ,NON(I) ;GET LOWER DIFF
03400 ADDI TAC1,(MQ) ;ADD IT TO READING
03500 AOJ AC,
03600 LDB AC,NON(I) ;GET UPPER DIFFERENCE
03700 SUBI AC,(MQ)
03800 MUL TAC,AC ;INTERPOLATE
03900 ADD TAC1,TAC ;CORRECTED READING
04000 FSC TAC1,226 ;FLOAT
04100 FMPR TAC1,SCALE(I)
04200 FADR TAC1,OFF(I)
04300 >
04400 IFN USER,<MOVE TAC1,TH(I)>
04500 CAIN I,5
04600 JRST[ TRNE ALT6
04700 FADR TAC1,OFF6
04800 FADR TAC1,ROT6
04900 MOVEM TAC1,TH+5
05000 FSBR TAC1,T0+5
05100 MOVSI MQ,(180.0)
05200 CAML TAC1,MQ
05300 JRST[ INCROT: MOVN MQ,MQ
05400 FSC MQ,1
05500 FADRM MQ,ROT6
05600 FADRM MQ,TH+5
05700 JRST THS]
05800 MOVN MQ,MQ
05900 CAMG TAC1,MQ
06000 JRST INCROT
06100 JRST THS]
06200 EXON: MOVEM TAC1,TH(I) ;THETA
06300 THS:
06400 IFE USER,<CAILE I,2>
06500 JRST[ MOVE AC,TH(I)
06600 EXCH AC,THP(I)
06700 FSBR AC,THP(I)
06800 FDVR AC,TDF
06900 MOVNM AC,TD(I)
07000 JRST SERVO]
07100 IFN REPORT,<
07200 MOVE MQ,TH(I)
07300 FSBR MQ,T0(I)
07400 PUSH DATA,MQ
07500 >
00100 IFE USER,<
00200 MOVE K,VCHAN(I)
00300 NVEL: PUSHJ P,PREAD
00400 LDB AC,SNUM
00500 ANDI DACVAL,7777
00600 ADDI AC,(DACVAL)
00700 TRNE VZERO
00800 MOVEM AC,VZ(I)
00900 SUB AC,VZ(I)
01000 FSC AC,216
01100 FMPR AC,VSCALE(I)
01200 IFN TACH,<
01300 TRNE VZERO
01400 SETZM VDTH(I)
01500 FADRM AC,VDTH(I)
01600 >
01700 MOVEM AC,TD(I)
01800 >
01900 XLIST
02000 SUBTTL SPACEWAR CODE SERVO CALC. LOU PAUL
02100 LIST
00100 SERVO: TRNN RUN
00200 JRST[ SOJGE I,RSTRT
00300 POPJ P,]
00400 SERVL: MOVE TAC,TH(I)
00500 FSBR TAC,T0(I) ;POSITION ERROR
00600 MOVEM TAC,ET0(I)
00700 TRNE FINAL
00800 JRST NULL ;MODIFY THETA BY INTEGRAL TERM
00900 MOVE TAC1,T0(I)
01000 FSBR TAC1,T0P(I)
01100 FDVR TAC1,TDF
01200 MOVE AC,TAC1
01300 FSBR AC,TDP(I)
01400 MOVEM TAC1,TDP(I)
01500 FDVR AC,TDF
01600 MOVEM AC,TDD(I)
01700 FMPR AC,CII(I)
01800 MODT0: HRRZ K,BMASK(I)
01900 TDNN K,FBI
02000 JRST [ PDIR:SETZM ET0(I)
02100 FMPR AC,CII(I)
02200 JRST NOBACK]
02300 FADRM TAC,ERRINT(I)
02400 IFE STEP,<
02500 MOVN TAC,TD(I)
02600 FADR TAC,TAC1
02700 >
02800 IFN STEP,<MOVN TAC,TD(I)>
02900 FMPR TAC,KV(I) ;VELOCITY GAIN
03000 FADR AC,TAC
03100 FMPR AC,CII(I)
03200 MOVN TAC,ET0(I)
03300 FMPR TAC,KE(I) ;ERROR GAIN
03400 FADR AC,TAC
03500 MOVN TAC,ERRINT(I)
03600 FMPR TAC,KI(I)
03700 FDVR TAC,CII(I)
03800 FADR AC,TAC
03900 NOBACK: CAIE I,2
04000 FMPR AC,[IRAD:0.0174532925] ;JOINT 3 IS IN INCHES
04100 MOVEM AC,TORE(I)
04200 FADR AC,CI(I) ;GRAVITY TERM
04300 MOVEM AC,T(I) ;ERROR CORRECTION TORQUE
04400 XLIST
04500 SUBTTL SPACEWAR CODE DRIVE CALC. LOU PAUL
04600 LIST
00100 DRIVE:
00200 IFN REPORT,<PUSH DATA,[<SIXBIT/DAC/>+6]>
00300 LS0: TDNN DATWD,BMASK(I)
00400 JRST ISP
00500 MOVE MQ,TD(I)
00600 JUMPN MQ,.+2
00700 MOVN MQ,ET0(I)
00800 FMPR MQ,T(I)
00900 JUMPL MQ,[ MOVM MQ,T(I)
01000 FSBR MQ,F0(I)
01100 JUMPL MQ,[ FDVR MQ,F0(I)
01200 FMPR MQ,V0(I)
01300 FSC MQ,1
01400 FADR MQ,V0(I)
01500 SKIPGE T(I)
01600 MOVN MQ,MQ
01700 JRST CEMF]
01800 MOVSI AC,(1.0)
01900 FSBR AC,PK(I)
02000 FMPR MQ,AC
02100 FMPR MQ,KM(I)
02200 FADR MQ,V0(I)
02300 SKIPG T(I)
02400 MOVN MQ,MQ
02500 JRST CEMF]
02600 SKIPN T(I)
02700 JRST[ SKIPN TD(I)
02800 JRST CEMF
02900 MOVE MQ,V0(I)
03000 SKIPGE TD(I)
03100 MOVN MQ,MQ
03200 JRST CEMF]
03300 JUMPE MQ,NOEX
03400 MOVE MQ,V0(I)
03500 SKIPGE T(I)
03600 MOVN MQ,MQ
03700 NOEX: MOVSI AC,(1.0)
03800 FADR AC,PK(I)
03900 FMPR AC,T(I)
04000 FMPR AC,KM(I)
04100 FADR MQ,AC
04200 CEMF:
04300 MOVE AC,EMF(I)
04400 FMPR AC,TD(I)
04500 MOVSI TAC1,(30.0)
04600 JUMPGE MQ,DRVLT
04700 MOVN AC,AC
04800 DRVLT: FSBR TAC1,AC ;Available drive voltage
04900 CAMGE TAC1,[1.0]
05000 JRST MAXDRV
05100 VELOK: MOVM AC,MQ
05200 FDVR AC,TAC1 ;AC= REL TIME ON
05300 FIX AC,211000 ;1=16
05400 CAML AC,[4000000]
05500 JRST DHO ;too much force stop the arm
05600 CAILE AC,776000
05700 MAXDRV: MOVEI AC,776000
05800 IFN REPORT+TRACK+USER+DEB,<
05900 MOVEM AC,MOTOR(I)
06000 SKIPGE MQ
06100 MOVNS MOTOR(I)
06200 >
06300 TRC AC,400000
06400 HRL AC,I
06500 SETDRV:
06600 IFN TRACK,<SKIPN WALK>
06700 DATAO WIDTH,AC
06800 TDZ DATWD,DMASK(I)
06900 JUMPGE MQ,ISP
07000 TDO DATWD,DMASK(I)
07100 ISP: SKIPE REV(I)
07200 TDC DATWD,DMASK(I)
07300 IFN REPORT,<PUSH DATA,MOTOR(I)>
07400 DATAO ARM,DATWD
07500 SOJGE I,RSTRT
07600 JFCL 10,DHO
07700 IFN TRACK,<SKIPN WALK>
00100 IFN SIMU,< ;IF IN SIMU PREDICT NEXT VALUE OF THETA
00200 MOVEI I,5
00300 PNT: MOVE AC,T0(I) ;PRESENT VALUE
00400 FSC AC,1 ;X 2
00500 FSBR AC,T0P(I) ;PREVIOUS VALUE
00600 MOVEM AC,TH(I) ;IS NEXT VALUE
00700 SOJGE I,PNT
00800 >
00900 TRZ VZERO
01000 SETZM ASTP
01100 TRNE STP
01200 JRST[ MOVEI I,5
01300 MTL: MOVE MQ,TORE(I)
01400 FDVR MQ,F0(I)
01500 SKIPN TD(I)
01600 FSC MQ,-2
01700 FMPR MQ,STQ(I)
01800 FADRM MQ,ASTP
01900 SOJGE I,MTL
02000 MOVE AC,ASTP
02100 CAML AC,SDTQ
02200 JRST[ AOS AC,ASTPP
02300 CAIL AC,2
02400 JRST[ TRZ STP
02500 SUB P,[XWD 1,1]
02600 SETZM ERRINT
02700 MOVE AC,[XWD ERRINT, ERRINT+1]
02800 BLT AC,ERRINT+5
02900 JRST RUDONE]
03000 POPJ P,]
03100 SETZM ASTPP
03200 POPJ P,]
03300 POPJ P,
03400
03500 NULL: SETZB AC,TAC1
03600 TLNN DATWD,NNUL
03700 TRNE WOB
03800 SOJA J,MODT0
03900 TDNN DATWD,GMASK(I)
04000 SOJA J,DRIVE
04100 MOVE MQ,FBI
04200 TDNN MQ,GMASK(I)
04300 SOJA J,PDIR
04400 MOVM MQ,TAC ;|POSITION ERROR|
04500 CAMLE MQ,ERR(I) ;COMPARE POSITION ERROR
04600 JRST MODT0
04700 MOVM MQ,TD(I)
04800 CAMLE MQ,ERR(I)
04900 JRST MODT0
05000 SO: TDZ DATWD,BMASK(I)
05100 IFN REPORT+TRACK+USER+DEB,<SETZM MOTOR(I)>
05200 DATAO ARM,DATWD
05300 HRLZ MQ,I
05400 TRC MQ,400000
05500 DATAO WIDTH,MQ
05600 SOJA J,DRIVE
05700 POPJ P,
05800
05900 XLIST
06000 SUBTTL SPACEWAR CODE LOU PAUL
06100 LIST
00100 NXTH: MOVE AC,[XWD T0,T0P]
00200 BLT AC,T0P+5
00300 TRNE WOB
00400 JRST[ MOVEI I,2
00500 WL1: SOSGE J,WOBCNT(I)
00600 JRST[ MOVEI J,=19
00700 MOVEM J,WOBCNT(I)
00800 JRST WL2]
00900 WL2: MOVE AC,SIN(J)
01000 FMPR AC,WOBMAG
01100 FADRM AC,TFF+3(I)
01200 SOJGE I,WL1
01300 JRST .+1]
01400 TRNE DROP
01500 JRST[ MOVEI I,5
01600 OL: MOVE AC,DELTH(I)
01700 FMPR AC,TDF
01800 FADRM AC,DTH(I)
01900 SOJGE I,OL
02000 JRST JALS]
02100 NTH:
02200 TRNE INCREM
02300 JRST[ MOVE MQ,ETIME
02400 ADDB MQ,TICKS
02500 CAML MQ,NTICKS
02600 JRST[ TRZ INCREM
02700 SKIPN TP
02800 TRO FINAL
02900 MOVEI AC,=600
03000 MOVEM AC,COUNT
03100 SKIPN TP(I)
03200 TLNN DATWD,INT
03300 JRST FIL1
03400 MOVE AC,[XWD NC,CI]
03500 BLT AC,CII+5
03600 FIL1: MOVEI I,5
03700 FIL: MOVE AC,DELTH(I)
03800 FADRB AC,DTH(I)
03900 FADR AC,TFF(I)
04000 MOVEM AC,T0(I)
04100 SETZM DELTH(I)
04200 SOJGE I,FIL
04300 POPJ P,]
04400 SETZ I,
04500 DIV MQ,NTICKS
04600 ASH MQ,-10
04700 FSC MQ,200
04800 MOVSI AC,(6.0)
04900 FMPR AC,MQ
05000 FADR AC,[-15.0]
05100 FMPR AC,MQ
05200 FADR AC,[10.0]
05300 FMPR AC,MQ
05400 FMPR MQ,MQ
05500 FMPR MQ,AC
05600 MOVEI I,5
05700 LDC: MOVE AC,DELTH(I)
05800 FMPR AC,MQ
05900 FADR AC,DTH(I)
06000 FADR AC,TFF(I)
06100 MOVEM AC,T0(I)
06200 SKIPN TP
06300 TLNN DATWD,INT
06400 JRST LDC1
06500 MOVE AC,DCI(I)
06600 FMPR AC,MQ
06700 FADR AC,PC(I)
06800 MOVEM AC,CI(I)
06900 MOVE AC,DCII(I)
07000 FMPR AC,MQ
07100 FADR AC,PCC(I)
07200 MOVEM AC,CII(I)
07300 LDC1: SOJGE I,LDC
07400 POPJ P,]
07500 JALS: MOVEI I,5
07600 JAL: MOVE AC,DTH(I)
07700 FADR AC,TFF(I)
07800 MOVEM AC,T0(I)
07900 SOJGE I,JAL
08000 POPJ P,
08100
00100 EVAL: MOVEI I,5
00200 EL: MOVE J,TP(I) ;POINTS TO KOE5
00300 JUMPE J,NE
00400 MOVE MQ,ETIME
00500 ADDB MQ,TJ(I)
00600 CAML MQ,TN(I) ;NUMBER OF TICKS THIS SEGMENT
00700 JRST[ ;END OF SEGMENT
00800 CAIN I,5
00900 JRST[ ;JOINT 6 HAS CONTROL WORD
01000 MOVE TAC,TICKS
01100 CAMGE TAC,NTICKS
01200 TRO INCREM
01300 LDB TAC,[POINT 3,1(J),2] ;LEVEL
01400 JUMPN TAC,[ ;SWITCH POINT
01500 SKIPG LOOP(TAC)
01600 JRST[ ;INITIALIZE LOOP
01700 LDB AC,[POINT 15,1(J),17]
01800 MOVEM AC,LOOP(TAC) ;COUNT
01900 JRST SETALT]
02000 SOSLE LOOP(TAC) ;IN LOOP
02100 SETALT: TRO ALT
02200 JRST GETNXT]
02300 JRST GETNXT]
02400 GETNXT: TRNE ALT
02500 JRST[ LDB J,[POINT 9,(J),8] ;ALT POINTER
02600 JRST GOT]
02700 LDB J,[POINT 9,(J),17] ;NEXT POINTER
02800 JUMPE J,[SETZM TP(I)
02900 TRO FINAL
03000 MOVEI AC,=600
03100 MOVEM AC,COUNT
03200 MOVE TAC,[XWD NC,CI]
03300 BLT TAC,CI+=11
03400 MOVE AC,A4(I)
03500 ADD AC,A3(I)
03600 ADD AC,A2(I)
03700 ADD AC,A1(I)
03800 ADD AC,A0(I)
03900 XOR AC,SC(I)
04000 FSC AC,0
04100 MOVEM AC,TFF(I)
04200 JRST NE]
04300 GOT: ADDI J,(CBUF)
04400 MOVEM J,TP(I)
04500 SUB MQ,TN(I) ;MICRO SEC INTO NEW SEGMENT
04600 MOVEM MQ,TJ(I) ;INITIALIZE
04700 HRRZ AC,(J)
04800 ASH AC,16
04900 MOVEM AC,TN(I)
05000 CAIN I,5
05100 JRST[
05200 HRRZ AC,1(J)
05300 ADDI AC,(CBUF)
05400 MOVEI MQ,6(AC)
05500 MOVEI K,5
05600 MOVE MQ,(MQ) ;NEW DATWD
05700 FTF: MOVE TAC,GMASK(K)
05800 TDNN TAC,FBI
05900 JRST[ TDNN TAC,MQ ;WAS FREE
06000 JRST FNF ;STILL FREE
06100 MOVE TAC,TH(K)
06200 MOVEM TAC,T0(K)
06300 FSBR TAC,TFF(K)
06400 MOVEM TAC,DTH(K)
06500 MOVNM TAC,DELTH(K)
06600 MOVE TAC,TN+5
06700 ASH TAC,16
06800 MOVEM TAC,NTICKS
06900 SETZM TICKS
07000 TRO INCREM
07100 JRST FNF]
07200 TDNN TAC,MQ ;NOT FREE
07300 JRST[ MOVE TAC,TDD(K) ;NOW IS FREE
07400 CAIE K,2
07500 FMPR TAC,IRAD
07600 FMPR TAC,CII(K)
07700 FMPR TAC,CII(K)
07800 FSBR TAC,T(K)
07900 MOVNM TAC,NC(K)
08000 JRST FNF]
08100 FNF: SOJGE K,FTF
08200 PUSHJ P,UPDC
08300 JRST DDELC]
08400 DDELC: HLRE AC,-3(J)
08500 MOVEM AC,A4(I)
08600 HRRE AC,-3(J)
08700 MOVEM AC,A3(I)
08800 HLRE AC,-2(J)
08900 MOVEM AC,A2(I)
09000 HRRE AC,-2(J)
09100 MOVEM AC,A1(I)
09200 HLLZ AC,-1(J)
09300 MOVEM AC,SC(I)
09400 HRRE AC,-1(J)
09500 MOVEM AC,A0(I)
09600 MOVE MQ,TJ(I)
09700 JRST ELL]
09800 ELL: DIV MQ,TN(I)
09900 TLNE DATWD,INT
10000 CAIE I,5
10100 JRST ELL1
10200 MOVEI K,=11
10300 HLRE TAC,MQ
10400 FSC TAC,211
10500 DECC: MOVE AC,DCI(K)
10600 FMPR AC,TAC
10700 FADR AC,PC(K)
10800 MOVEM AC,CI(K)
10900 SOJGE K,DECC
11000 ELL1: MOVE AC,A4(I)
11100 MUL AC,MQ
11200 ADD AC,A3(I)
11300 MUL AC,MQ
11400 ADD AC,A2(I)
11500 MUL AC,MQ
11600 ADD AC,A1(I)
11700 MUL AC,MQ
11800 ADD AC,A0(I)
11900 XOR AC,SC(I)
12000 FSC AC,0
12100 MOVEM AC,TFF(I)
12200 CAIN I,5
12300 JRST[ MOVE AC,TFF+5
12400 FSBR AC,T0+5
12500 MOVSI MQ,(180.0)
12600 CAML AC,MQ
12700 JRST[ INCT0: FSC MQ,1
12800 FADRM MQ,T0+5
12900 JRST .+1]
13000 MOVN MQ,MQ
13100 CAMG AC,MQ
13200 JRST INCT0
13300 JRST .+1]
13400 NE: SOJGE I,EL
13500 TRZ ALT
13600 POPJ P,
13700
00100 DHO: AOJ I, ;DISASTER HAS OCCURED
00200 LSH I,3 ;JOINT NUMBER
00300 IORI I,EXER
00400 MOVEM I,TRAJER
00500 POP P,I
00600 ZITO: SETZM ERRINT
00700 MOVE AC,[XWD ERRINT,ERRINT+1]
00800 BLT AC,ERRINT+5
00900
01000 TOFF: MOVE AC,STKPTR
01100 MOVEM AC,ERRSTK
01200 DATAO DEVT,[0]
01300 MOVEI L,1000
01400 TRNE RONLY
01500 JRST READED
01600 TRZ RUN+FINAL+DROP+INCREM+HCL+STP+WOB ;STOP THE ARM
01700 SETZM TP
01800 MOVE AC,[XWD TP,TP+1]
01900 BLT AC,TP+5
02000 PUSHJ P,SETSET
02100 MOVNXT: AOS AC,STKPTR
02200 MOVNX: SOJL L,[ LE:
02300 MOVEI TAC,LOOPER
02400 MOVEM TAC,TRAJER
02500 JRST PW]
02600 HLRE TAC,@STKPTR
02700 CAIN TAC,3 ;IS IT A WAIT
02800 JRST MOVNXT
02900 CAIN TAC,SKPERR
03000 JRST[ HRRZ TAC,(AC)
03100 CAMN TAC,TRAJER
03200 JRST[ AOS STKPTR
03300 JRST NEXT]
03400 JRST MOVNXT]
03500 CAIN TAC,SKPNER
03600 JRST[ HRRZ TAC,(AC)
03700 CAME TAC,TRAJER
03800 JRST[ AOS STKPTR
03900 JRST MOVNXT]
04000 JRST NEXT]
04100 CAIN TAC,SKPSER
04200 JRST[ LDB MQ,[POINT 3,(AC),35]
04300 LDB TAC,[POINT 3,TRAJER,35]
04400 CAIN TAC,(MQ)
04500 JRST[ HRRZ TAC,(AC)
04600 ANDI TAC,777770
04700 TDNE TAC,TRAJER
04800 JRST[ AOS STKPTR
04900 JRST NEXT]
05000 JRST MOVNXT]
05100 JRST MOVNXT]
05200 CAIN TAC,JMPREL
05300 JRST[ HRRE TAC,(AC)
05400 ADDI AC,(TAC)
05500 HRRM AC,STKPTR
05600 JRST MOVNX]
05700 PW: CAIL AC,BUF
05800 HRRM AC,JUMPBK
05900 MOVEI AC,WAITIN
06000 MOVEM AC,STKPTR
06100 MOVEI AC,3
06200 MOVEM AC,FUNCT
06300 IFN TRACK,<SKIPN WALK>
06400 DATAO ARM,[2] ;STOP THE ARM
06500 IFN REPORT,<PUSH DATA,[0]>
06600 READED: TRO DTST
06700 IFN DEB,<
06800 MOVEM 17,ACSAV+17
06900 MOVEI 17,ACSAV
07000 BLT 17,ACSAV+16
07100 >
07200 JRST SWDONE
07300
00100 NEXT: TRNE RUN
00200 JRST[ SETZM FUNCT
00300 JRST NXTJIF]
00400 MOVEI L,1000
00500 MOVE AC,FUNCT
00600 CAIE AC,6 ;SET TOUCH
00700 JRST[ MOVE TAC,SOTCHS
00800 MOVEM TAC,SOTCH
00900 TRZ STCH
01000 JUMPE TAC,.+1
01100 TRO STCH
01200 JRST .+1]
01300 IFN TRACK,<SKIPN WALK>
01400 MOVEI DATWD,2
01500 DATAO ARM,DATWD ;STOP THE ARM
01600 INCPIC: AOS AC,STKPTR
01700 PICKUP: SOJL L,LE
01800 HLRE TAC,@STKPTR
01900 CAIN TAC,JMPABS
02000 JRST[JMPA:HRRZ TAC,@STKPTR
02100 MOVEM TAC,STKPTR
02200 HLRZ TAC,@STKPTR
02300 CAIN TAC,3
02400 JRST INCPIC
02500 JRST PICKUP]
02600 CAIN TAC,SKPERR
02700 JRST[ HRRZ TAC,@STKPTR
02800 CAMN TAC,TRAJER
02900 AOS STKPTR
03000 JRST INCPIC]
03100 CAIN TAC,SKPNER
03200 JRST[ HRRZ TAC,@STKPTR
03300 CAME TAC,TRAJER
03400 AOS STKPTR
03500 JRST INCPIC]
03600 CAIN TAC,SKPSER
03700 JRST[ LDB MQ,[POINT 3,@STKPTR,35]
03800 LDB TAC,[POINT 3,TRAJER,35]
03900 CAIN TAC,(MQ)
04000 JRST[ HRRZ TAC,@STKPTR
04100 ANDI TAC,777770
04200 TDNE TAC,TRAJER
04300 AOS STKPTR
04400 JRST INCPIC]
04500 JRST INCPIC]
04600 CAIN TAC,JMPREL
04700 JRST[ HRRE TAC,@STKPTR
04800 ADD TAC,STKPTR
04900 HRRM TAC,STKPTR
05000 JRST PICKUP]
05100 SETZM TRAJER
05200 MOVEI I,100
05300 MOVEM I,COUNT
05400 TRZE TAC,MERGE
05500 TRO BOTH
05600 MOVEM TAC,FUNCT
05700 CAIN TAC,3 ;IS IT A WAIT
05800 JRST[ MOVE TAC,STKPTR
05900 CAIL TAC,BUF
06000 HRRM TAC,JUMPBK
06100 MOVEI TAC,WAITIN
06200 MOVEM TAC,STKPTR
06300 IFN REPORT,<PUSH DATA,[0]>
06400 TRO DTST
06500 PUSHJ P,SWDONE]
06600 MARK:
06700 IFN REPORT,<
06800 PUSH DATA,[<SIXBIT/NEXT/>+1]
06900 MOVE TAC,FUNCT
07000 HRL TAC,0
07100 PUSH DATA,TAC
07200 >
07300
07400 ; JRST DISP
07500 SWDONE:
07600 MOVEM BITSAV
07700 MOVEM DATWD,DATWDS
07800 MOVEM CBUF,CBUFS
07900 IFN REPORT+TRACK,<
08000 MOVEM DATA,DATPT
08100 >
08200 IFE USER,<
08300 IFN TRACK,<
08400 SKIPE WALK
08500 JRST @STRADR-1
08600 >
08700 CALLI 400024
08800 >
08900 IFN USER,<
09000 JRST @STRADR-1
09100 >
09200
09300 SETSET: MOVEI I,5
09400 TCHK: MOVE J,TP(I)
09500 JUMPE J,ATEND
09600 SETZM TJ(I)
09700 SETZM TN(I)
09800 GNN: LDB J,[POINT 9,(J),17]
09900 ADDI J,(CBUF)
10000 CAIN J,(CBUF)
10100 JRST[ MOVEM J,TP(I)
10200 JRST ATEND]
10300 JRST GNN
10400 ATEND: SOJGE I,TCHK
10500 PUSHJ P,EVAL
10600 MOVEI I,5
10700 FDTH: MOVE AC,TH(I)
10800 MOVEM AC,T0(I)
10900 FSBR AC,TFF(I)
11000 MOVEM AC,DTH(I)
11100 SETZM DELTH(I)
11200 SETZM TDP(I)
11300 SETZM TDD(I)
11400 SOJGE I,FDTH
11500 POPJ P,
11600
11700
11800 UPDC: MOVE TAC,[XWD NC,PC]
11900 BLT TAC,PCC+5
12000 HRL AC,AC
12100 HRRI AC,NC
12200 BLT AC,NC+6
12300 MOVE DATWD,NC+6
12400 TLNE DATWD,NXTFN
12500 JRST[ AOS AC,STKPTR
12600 HLRE AC,(AC)
12700 MOVEM AC,FUNCT
12800 JRST .+1]
12900 HRRZM DATWD,FBI
13000 MOVEI K,5
13100 UPL: MOVE AC,NC(K)
13200 HLLZM AC,NC(K)
13300 HRLZM AC,NCC(K)
13400 MOVE AC,MOTARM(K)
13500 FADRB AC,NCC(K)
13600 TLNN DATWD,INT
13700 JRST UPL1
13800 FSBR AC,PCC(K)
13900 MOVEM AC,DCII(K)
14000 MOVE AC,NC(K)
14100 FSBR AC,PC(K)
14200 MOVEM AC,DCI(K)
14300 UPL1: TDNE DATWD,BMASK(K)
14400 TDO DATWD,BMASK(K)
14500 SOJGE K,UPL
14600 TLNE DATWD,INT
14700 POPJ P,
14800 MOVE AC,[XWD NC,CI]
14900 BLT AC,CII+5
15000 POPJ P,
00100 PREAD:
00200 IFN TRACK,<
00300 SKIPE WALK
00400 JRST[GNPR:AOBJP DATA,[ MOVE AC,[IOWD DBL,DATO]
00500 MOVEM AC,DATPT
00600 MOVE DATA,DATPT
00700 SETZ TAC,
00800 INPUT 15,1
00900 JRST GNPR]
01000 MOVE DACVAL,(DATA)
01100 JRST @READFN]
01200 >
01300 MOVEI TAC,10
01400 MOVEM TAC,DATMSD
01500 DACRED: SOSGE DATMSD
01600 JRST[REDER: MOVEI TAC,READER
01700 MOVEM TAC,TRAJER
01800 JRST TOFF]
01900 DACST: CONO DB,4250
02000 CONO AD,(K)
02100 NREAD: MOVEI TAC,30
02200 CONSO DB,1000
02300 SOJGE TAC,.-1
02400 JUMPL TAC,[DACDIE:CONO AD,4000(K) ;STOP DAC
02500 TRO REREAD
02600 IFN DEB,<MOVEM DACVAL,DACERR>
02700 MOVEI TAC,12
02800 WRH: SOJGE TAC,WRH
02900 JRST DACRED]
03000 DATAI DB,DACVAL
03100 CONSZ DB,10000
03200 JRST DACDIE
03300 XOR DACVAL,SBMSK
03400 IFN TRACK,<PUSH DATA,DACVAL>
03500 JRST @READFN
03600 FREAD: ADDI K,770000
03700 IFN TRACK,<SKIPN WALK>
03800 CONO AD,4000(K) ;STOP AD ON NEXT CHANNEL
03900 POPJ P,
04000 READFN: FREAD
04100
04200 XLIST
04300 SUBTTL CONSTANTS LOU PAUL
04400 LIST
00100 NON: POINT 12,INNER(AC),11
00200 POINT 12,INNER(AC),23
00300 POINT 12,INNER(AC),35
00400 POINT 12,OUTER(AC),11
00500 POINT 12,OUTER(AC),23
00600 POINT 12,OUTER(AC),35
00700 ERR: 0.05
00800 0.05
00900 0.01
01000 0.1
01100 0.1
01200 0.7
01300 IFN SIMU,<
01400 TH-1
01500 ARM.TH: .+4
01600 >
01700 TH: -180.0 ;THE NEXT 7 LOCATIONS ARE BLOCK TRANSFERED.
01800 -90.0
01900 12.0
02000 -90.0
02100 90.0
02200 0.0
02300 IFN SIMU,<ARM.GR:>
02400 HAND: 3.0
02500 TDD: BLOCK 6
02600 ERRINT: 0
02700 0
02800 0
02900 0
03000 0
03100 0
03200 DTH: BLOCK 6
03300 TD: BLOCK 6
03400 T0P: BLOCK 6
03500 TDP: BLOCK 6
03600 ET0: BLOCK 6
03700 T0: -150.0
03800 -75.0
03900 14.0
04000 -90.0
04100 60.0
04200 0.0000
04300 TFF: -150.0
04400 -75.0
04500 14.0
04600 -90.0
04700 60.0
04800 0.0000
04900 DELTH: BLOCK 6 ;THIS AND THE NEXT ARE BLT ED TOGETHER
05000 DDTH: 0
05100 0
05200 0
05300 0
05400 0
05500 0
05600 NTICKS: 0
05700 DTHS: BLOCK =30
05800 TORE: BLOCK 6
05900 T: BLOCK 6
06000 IFN USER+REPORT+TRACK+DEB,<MOTOR: BLOCK 6>
06100 FBI: 252502
06200 VZ: BLOCK 3
06300 IFN TACH,<
06400 VDTH: BLOCK 3
06500 >
06600 THP: BLOCK 6
06700 MOTARM: 840.0
06800 900.0
06900 70.0
07000 55.0
07100 55.0
07200 64.0
07300 STQ: BLOCK 6
07400 SDTQ: 0
07500 ASTP: 0
07600 ASTPP: 0
07700 PC: BLOCK 6
07800 PCC: BLOCK 6
07900 DCI: BLOCK 6
08000 DCII: BLOCK 6
08100 CI: 0
08200 0
08300 0
08400 0
08500 0
08600 0
08700 CII: 1000.0
08800 1200.0
08900 100.0
09000 100.0
09100 100.0
09200 100.0
09300 NC: 0
09400 0
09500 0
09600 0
09700 0
09800 0
09900 NCC: 1000.0
10000 1200.0
10100 100.0
10200 100.0
10300 100.0
10400 100.0
10500 IFN DEB,<DACERR: 0>
10600 REFTR: 0
10700 ETIME: =16667
10800 TDF: 1.0
10900 IFN DEB,<
11000 ETIM: 0
11100 ACSAV: BLOCK 20
11200 >
11300 PDL: DHO
11400 BLOCK PDLL
11500 LTIME: 0
11600 IFN SIMU,<ARM.FU:>
11700 FUNCT: 0
11800 ROT6: 0
11900 TRAJER: 0
12000 DOING: 0
12100 DATMSD: 0
12200 CBUFS: 0
12300 DATWDS: 0
12400 SNUM: POINT 12,DACVAL,23
12500 SBMSK: 400040004000
12600 REV: 0
12700 0
12800 -1
12900 0
13000 -1
13100 -1
13200 DMASK: 400000
13300 100000
13400 20000
13500 4000
13600 1000
13700 200
13800 BMASK: XWD 400000,200000
13900 XWD 200000, 40000
14000 XWD 100000, 10000
14100 XWD 40000, 2000
14200 XWD 20000, 400
14300 XWD 10000, 100
14400 GMASK: 200000
14500 40000
14600 10000
14700 2000
14800 400
14900 100
15000 VCHAN: 52B23
15100 53B23
15200 54B23
15300 CHAN: 55B23
15400 56B23
15500 57B23
15600 60B23
15700 61B23
15800 GAIN: MOVEI I,5
15900 SETGN: MOVE AC,KV(I)
16000 FMPR AC,AC
16100 FMPR AC,THIRD
16200 MOVEM AC,KE(I)
16300 FMPR AC,KV(I)
16400 FMPR AC,SIXTH
16500 MOVEM AC,KI(I)
16600 SOJGE I,SETGN
16700 SETNM: MOVE 1,[SIXBIT/[ARM]/]
16800 CALLI 1,400002
16900 MOVE I,RET
17000 MOVEM I,SETNM
17100 JRST SETNM
17200 RET: POPJ P,
17300 THIRD: 0.3
17400 SIXTH: 0.1
17500 BLOCK =20
17600 0
17700 WAITIN: XWD 3,0
17800 JUMPBK: XWD JMPABS,WAITIN
17900 STKPTR: WAITIN
18000 ERRSTK: 0
18100 BITSAV: 0
18200 COUNT: 0
18300 STWT: 0
18400 HCNT: 0
18500 TP: 0
18600 0
18700 0
18800 0
18900 0
19000 0
19100 TJ: BLOCK 6
19200 LOOP: BLOCK 10
19300 TN: BLOCK 6
19400 SC: BLOCK 6
19500 A0: BLOCK 6
19600 A1: BLOCK 6
19700 A2: BLOCK 6
19800 A3: BLOCK 6
19900 A4: BLOCK 6
20000 BLOCKS: 0
20100 NXTBUF: 0
20200 BUF: 0
20300 BLOCK 1000
20400 BUF2: 0
20500 BLOCK 1000
20600 IFN REPORT+TRACK,<
20700 DATIWD: 0
20800 0
20900 DATPT: 0
21000 DATO: BLOCK DBL+100
21100 >
21200 IFN DYNAMICS,<
21300 DDAT: <SIXBIT/FORD/>+6
21400 FOR: BLOCK 6
21500 <SIXBIT/BACK/>+6
21600 BAK: BLOCK 6
21700 >